package com.im.service.group.service;

import com.im.common.model.RestResponse;
import com.im.service.group.model.req.*;
import com.im.service.group.model.resp.AddMemberResp;
import com.im.service.group.model.resp.GetRoleInGroupResp;

import java.util.Collection;
import java.util.List;

public interface ImGroupMemberService {
    // 导入群成员
    List<AddMemberResp> importGroupMember(ImportGroupMemberReq req);

    // 添加群成员
    List<AddMemberResp> addMember(AddGroupMemberReq req);

    // 移除群成员
    void removeMember(RemoveGroupMemberReq req);

    // 移除群成员，仅供内部调用，不暴露给前端
    RestResponse addGroupMember(String groupId, Integer appId, GroupMemberDto dto);

    // 移除群成员
    void removeGroupMember(String groupId, Integer appId, String memberId);

    // 获取成员在群组中的角色
    GetRoleInGroupResp getRoleInGroupOne(String groupId, String memberId, Integer appId);

    // 获取加入指定群组的成员
    Collection<String> getMemberJoinedGroup(GetJoinedGroupReq req);

    // 获取指定群组的成员列表
    List<GroupMemberDto> getGroupMember(String groupId, Integer appId);

    // 获取指定群组成员的ID列表
    List<String> getGroupMemberId(String groupId, Integer appId);

    // 获取指定群组的管理员列表
    List<GroupMemberDto> getGroupManager(String groupId, Integer appId);

    // 更新群成员信息
    void updateGroupMember(UpdateGroupMemberReq req);

    // 转移群成员
    void transferGroupMember(String owner, String groupId, Integer appId);

    // 发送消息
    void speak(SpeaMemberReq req);

    // 同步加入群组的成员
    Collection<String> syncMemberJoinedGroup(String operater, Integer appId);

}
